package com.javassits;

import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import org.junit.jupiter.api.Test;

import java.lang.reflect.Method;

public class javassistTest {

    @Test
    public void test1() throws Exception {
        ClassPool pool = ClassPool.getDefault();
        //制造类
        CtClass ctClass = pool.makeClass("com.javassits.server.Impl.AccountImpl");
        //制造方法
        String methodCode="public void insert(){System.out.println(1)}";
        CtMethod make = CtMethod.make(methodCode, ctClass);
        //将方法加入类中
        ctClass.addMethod(make);
        //在内存中生产class
        ctClass.toClass();

        //类加载完成后,获取字节码文件
        Class<?> aClass = Class.forName("com.javassits.server.Impl.AccountImpl");
        //创建对象
        Object o = aClass.newInstance();
        //获取方法
        Method insert = aClass.getDeclaredMethod("insert");
        //调用方法
        insert.invoke(o);
    }

}
